Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / InterfacesDiscoveryIfac.test.js

Displaying Raw • Download


tests/frontend/InterfacesDiscoveryIfac.test.js bce42bcdce0e7d2c6d78228e864a4cd1d974cc82 (bce42bcd) Text, 15.60 KB

Tff7b72import Tb4b4b4{ Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3InterfacesPage Tff7b72from Ta5d6ff"../../meshchatx/src/frontend/components/interfaces/InterfacesPage.vue"Tb4b4b4;
Tff7b72import Te6edf3AddInterfacePage Tff7b72from Ta5d6ff"../../meshchatx/src/frontend/components/interfaces/AddInterfacePage.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../meshchatx/src/frontend/js/ToastUtils"Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/GlobalState"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3configTff7b72: Tb4b4b4{ Te6edf3themeTff7b72: Ta5d6ff"light" Tb4b4b4}Tb4b4b4,
Te6edf3hasPendingInterfaceChangesTff7b72: Tff7b72falseTb4b4b4,
Te6edf3modifiedInterfaceNamesTff7b72: Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/Utils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3formatBytesTff7b72: Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Ta5d6ff`Tffd700${Te6edf3bTffd700}Ta5d6ff BTa5d6ff`Tb4b4b4,
Te6edf3isInterfaceEnabledTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/ToastUtils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3successTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3errorTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3loadingTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3dismissTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/DialogUtils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3alertTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3confirmTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3viTb4b4b4.Te6edf3mockTb4b4b4(Ta5d6ff"../../meshchatx/src/frontend/js/ElectronUtils"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Tff7b72defaultTff7b72: Tb4b4b4{
Te6edf3relaunchTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3isElectronTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72falseTb4b4b4,
Te6edf3isWindowsElectronTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3mockAxios Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/reticulum/interfaces"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3interfacesTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/app/info"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3app_infoTff7b72: Tb4b4b4{ Te6edf3is_reticulum_runningTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/interface-stats"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3interface_statsTff7b72: Tb4b4b4{ Te6edf3interfacesTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/reticulum/discovery"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3discoveryTff7b72: Tb4b4b4{
Te6edf3discover_interfacesTff7b72: Tff7b72trueTb4b4b4,
Te6edf3interface_discovery_whitelistTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3interface_discovery_blacklistTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/reticulum/discovered-interfaces"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3interfacesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3activeTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3api Tff7b72= Te6edf3mockAxiosTb4b4b4;

Tff7b72const Te6edf3ifaceWithIfac Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"BackboneInterface"Tb4b4b4,
Te6edf3reachable_onTff7b72: Ta5d6ff"rns.kin.earth"Tb4b4b4,
Te6edf3portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3transport_idTff7b72: Ta5d6ff"eea3d09f02143e157b3dae83060ee843"Tb4b4b4,
Te6edf3network_idTff7b72: Ta5d6ff"abc123"Tb4b4b4,
Te6edf3discovery_hashTff7b72: Ta5d6ff"kin-earth-1"Tb4b4b4,
Te6edf3network_nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3passphraseTff7b72: Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4,
Te6edf3ifac_netnameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3ifac_netkeyTff7b72: Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4,
Te6edf3publish_ifacTff7b72: Tff7b72trueTb4b4b4,
Te6edf3config_entryTff7b72:
Ta5d6ff"[[kin.earth]]\n type = BackboneInterface\n enabled = yes\n remote = rns.kin.earth\n target_port = 4242\n network_name = kin.earth\n passphrase = asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3mountInterfacesPage Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=>
Te6edf3mountTb4b4b4(Te6edf3InterfacesPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3RouterLinkTff7b72: Tff7b72trueTb4b4b4,
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ImportInterfacesModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3InterfaceTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"InterfacesPage discovered IFAC display"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3sessionStorage Tff7b72!== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Te6edf3sessionStorageTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"clipboard"Tb4b4b4, Tb4b4b4{
Te6edf3valueTff7b72: Tb4b4b4{ Te6edf3writeTextTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3configurableTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"derives network_name and passphrase from either alias"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredNetworkNameTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredPassphraseTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4;

T8b949e// raw RNS keys only, no aliases
Tff7b72const Te6edf3rawOnly Tff7b72= Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"raw"Tb4b4b4,
Te6edf3ifac_netnameTff7b72: Ta5d6ff"raw.net"Tb4b4b4,
Te6edf3ifac_netkeyTff7b72: Ta5d6ff"rawkey"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredNetworkNameTb4b4b4(Te6edf3rawOnlyTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"raw.net"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredPassphraseTb4b4b4(Te6edf3rawOnlyTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"rawkey"Tb4b4b4)Tb4b4b4;

T8b949e// missing IFAC
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredNetworkNameTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"open" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3discoveredPassphraseTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"open" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"masks passphrase for display safety"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3maskPassphraseTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toMatchTb4b4b4(Ta5d6ff/^as\*+G9$/Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3maskPassphraseTb4b4b4(Ta5d6ff"ab"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"**"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3maskPassphraseTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3maskPassphraseTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"renders network_name and passphrase chips when announce includes IFAC"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setDataTb4b4b4(Tb4b4b4{
Te6edf3discoveredInterfacesTff7b72: Tb4b4b4[Te6edf3ifaceWithIfacTb4b4b4]Tb4b4b4,
Te6edf3discoveryConfigTff7b72: Tb4b4b4{
Te6edf3discover_interfacesTff7b72: Tff7b72trueTb4b4b4,
Te6edf3interface_discovery_sourcesTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3interface_discovery_whitelistTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3interface_discovery_blacklistTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3required_discovery_valueTff7b72: Tff7b72nullTb4b4b4,
Te6edf3autoconnect_discovered_interfacesTff7b72: T79c0ff0Tb4b4b4,
Te6edf3network_identityTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3text Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"interfaces.discovered_network_name"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"interfaces.discovered_passphrase"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3toMatchTb4b4b4(Ta5d6ff/as\*+G9/Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"does not render passphrase row when announce omits IFAC"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setDataTb4b4b4(Tb4b4b4{
Te6edf3discoveredInterfacesTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"open"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"BackboneInterface"Tb4b4b4,
Te6edf3reachable_onTff7b72: Ta5d6ff"10.0.0.1"Tb4b4b4,
Te6edf3portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3discovery_hashTff7b72: Ta5d6ff"open-1"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3text Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"interfaces.discovered_network_name"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"interfaces.discovered_passphrase"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"copyDiscoveredConfigEntry writes the config block to clipboard"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3copyDiscoveredConfigEntryTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4.Te6edf3config_entryTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"copyDiscoveredConfigEntry shows error when no config_entry is present"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3copyDiscoveredConfigEntryTb4b4b4(Tb4b4b4{ Te6edf3nameTff7b72: Ta5d6ff"no-config" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3navigatorTb4b4b4.Te6edf3clipboardTb4b4b4.Te6edf3writeTextTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"useDiscoveredInterface stores prefill in sessionStorage and navigates"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3routerPush Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountTb4b4b4(Te6edf3InterfacesPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3RouterLinkTff7b72: Tff7b72trueTb4b4b4,
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ImportInterfacesModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3InterfaceTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3routerPush Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useDiscoveredInterfaceTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3stored Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3sessionStorageTb4b4b4.Te6edf3getItemTb4b4b4(Ta5d6ff"meshchatx.discoveredInterfacePrefill"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3typeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"BackboneInterface"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3target_hostTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"rns.kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3target_portTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff4242Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3network_nameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3passphraseTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3storedTb4b4b4.Te6edf3config_entryTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"[[kin.earth]]"Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3routerPushTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"interfaces.add"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3from_discoveredTff7b72: Ta5d6ff"1" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"Use this interface menu item appears for every discovered card"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountInterfacesPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3setDataTb4b4b4(Tb4b4b4{
Te6edf3discoveredInterfacesTff7b72: Tb4b4b4[Te6edf3ifaceWithIfacTb4b4b4]Tb4b4b4,
Te6edf3openDiscoveryActionKeyTff7b72: Ta5d6ff"kin-earth-1"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3useButton Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'[data-testid="use-discovered-interface"]'Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3useButtonTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3copyCfg Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'[data-testid="copy-discovered-config"]'Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3copyCfgTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"AddInterfacePage discovered prefill"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3viTb4b4b4.Te6edf3clearAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3sessionStorage Tff7b72!== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Te6edf3sessionStorageTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3mockAxiosTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3mockAxiosTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3messageTff7b72: Ta5d6ff"ok" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3mountAdd Tff7b72= Tb4b4b4(Te6edf3$route Tff7b72= Tb4b4b4{ Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3from_discoveredTff7b72: Ta5d6ff"1" Tb4b4b4} Tb4b4b4}Tb4b4b4) Tb4b4b4=>
Te6edf3mountTb4b4b4(Te6edf3AddInterfacePageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$routeTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3msgTb4b4b4) Tb4b4b4=> Te6edf3msgTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4[Ta5d6ff"RouterLink"Tb4b4b4, Ta5d6ff"MaterialDesignIcon"Tb4b4b4, Ta5d6ff"Toggle"Tb4b4b4, Ta5d6ff"ExpandingSection"Tb4b4b4, Ta5d6ff"FormLabel"Tb4b4b4, Ta5d6ff"FormSubLabel"Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"applies a discovered prefill payload to the form on mount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3sessionStorageTb4b4b4.Te6edf3setItemTb4b4b4(
Ta5d6ff"meshchatx.discoveredInterfacePrefill"Tb4b4b4,
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"BackboneInterface"Tb4b4b4,
Te6edf3target_hostTff7b72: Ta5d6ff"rns.kin.earth"Tb4b4b4,
Te6edf3target_portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3transport_identityTff7b72: Ta5d6ff"eea3d09f02143e157b3dae83060ee843"Tb4b4b4,
Te6edf3network_nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3passphraseTff7b72: Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountAddTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceNameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTypeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"BackboneInterface"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTargetHostTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"rns.kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTargetPortTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff4242Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sharedInterfaceSettingsTb4b4b4.Te6edf3network_nameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sharedInterfaceSettingsTb4b4b4.Te6edf3passphraseTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sessionStorageTb4b4b4.Te6edf3getItemTb4b4b4(Ta5d6ff"meshchatx.discoveredInterfacePrefill"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"uses config_entry directly when provided"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3sessionStorageTb4b4b4.Te6edf3setItemTb4b4b4(
Ta5d6ff"meshchatx.discoveredInterfacePrefill"Tb4b4b4,
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3config_entryTff7b72:
Ta5d6ff"[[Quick Backbone]]\ntype = BackboneInterface\nremote = node.example\ntarget_port = 4242\nnetwork_name = quick.net\npassphrase = quickpass"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountAddTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3mockAxiosTb4b4b4.Te6edf3postTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(
Ta5d6ff"/api/v1/reticulum/interfaces/add"Tb4b4b4,
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"Quick Backbone"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"BackboneInterface"Tb4b4b4,
Te6edf3target_hostTff7b72: Ta5d6ff"node.example"Tb4b4b4,
Te6edf3target_portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3network_nameTff7b72: Ta5d6ff"quick.net"Tb4b4b4,
Te6edf3passphraseTff7b72: Ta5d6ff"quickpass"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"does not crash when from_discovered query is set but no payload is in storage"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountAddTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceNameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"end-to-end with config_entry: useDiscoveredInterface -> AddInterfacePage POST"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3routerPush Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3interfacesWrapper Tff7b72= Te6edf3mountTb4b4b4(Te6edf3InterfacesPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3RouterLinkTff7b72: Tff7b72trueTb4b4b4,
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ImportInterfacesModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3InterfaceTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3routerPush Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3interfacesWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useDiscoveredInterfaceTb4b4b4(Te6edf3ifaceWithIfacTb4b4b4)Tb4b4b4;
Te6edf3interfacesWrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3routerPushTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"interfaces.add"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3from_discoveredTff7b72: Ta5d6ff"1" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addWrapper Tff7b72= Te6edf3mountAddTb4b4b4(Tb4b4b4{ Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3from_discoveredTff7b72: Ta5d6ff"1" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// when a config_entry is present, the prefill triggers an immediate
T8b949e// POST through quickAddInterfaceFromConfig with the IFAC values intact
Tff7b72const Te6edf3postCall Tff7b72= Te6edf3mockAxiosTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Tb4b4b4[Te6edf3urlTb4b4b4]Tb4b4b4) Tb4b4b4=> Te6edf3url Tff7b72=== Ta5d6ff"/api/v1/reticulum/interfaces/add"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3postCallTb4b4b4)Tb4b4b4.Te6edf3toBeTruthyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3postCallTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3objectContainingTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3typeTff7b72: Ta5d6ff"BackboneInterface"Tb4b4b4,
Te6edf3target_hostTff7b72: Ta5d6ff"rns.kin.earth"Tb4b4b4,
Te6edf3target_portTff7b72: T79c0ff4242Tb4b4b4,
Te6edf3network_nameTff7b72: Ta5d6ff"kin.earth"Tb4b4b4,
Te6edf3passphraseTff7b72: Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"end-to-end without config_entry: prefill populates form fields"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3routerPush Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3ifaceNoCfg Tff7b72= Tb4b4b4{ Tb4b4b4...Te6edf3ifaceWithIfacTb4b4b4, Te6edf3config_entryTff7b72: Tff7b72null Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3interfacesWrapper Tff7b72= Te6edf3mountTb4b4b4(Te6edf3InterfacesPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3RouterLinkTff7b72: Tff7b72trueTb4b4b4,
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ImportInterfacesModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3InterfaceTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3routerPush Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3interfacesWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useDiscoveredInterfaceTb4b4b4(Te6edf3ifaceNoCfgTb4b4b4)Tb4b4b4;
Te6edf3interfacesWrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3addWrapper Tff7b72= Te6edf3mountAddTb4b4b4(Tb4b4b4{ Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3from_discoveredTff7b72: Ta5d6ff"1" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceNameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTypeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"BackboneInterface"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTargetHostTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"rns.kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3newInterfaceTargetPortTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff4242Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sharedInterfaceSettingsTb4b4b4.Te6edf3network_nameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"kin.earth"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3addWrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sharedInterfaceSettingsTb4b4b4.Te6edf3passphraseTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"asty8vT8spXNQdCnPVMATbCKkwUxuzG9"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────